package com.ysh.xiaomi.web.servelt;

import com.ysh.xiaomi.dao.CartDao;
import com.ysh.xiaomi.pojo.*;
import com.ysh.xiaomi.service.AddressService;
import com.ysh.xiaomi.service.OrderService;
import com.ysh.xiaomi.service.impl.AddressServiceImpl;
import com.ysh.xiaomi.service.impl.OrderServiceImpl;
import com.ysh.xiaomi.utils.StringConstans;
import com.ysh.xiaomi.utils.StringUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 袁胜虎 on 2022/8/18 19:35
 */
public class OrderServlet {
    OrderService orderService = new OrderServiceImpl();
    AddressService addressService = new AddressServiceImpl();

    public String preView(HttpServletRequest request, HttpServletResponse response){
        //下单前的操作,主要是查询地址数据,然后跳转到选择地址确认下单的页面
        //查询当前登录的用户的地址
        TbUser user = (TbUser) request.getSession().getAttribute("user");
        Long userId = user.getId();
        List<TbAddress> addressList=addressService.findAllAddressByUserId(userId);
        //将地址数据保存起来
        request.getSession().setAttribute("addressList",addressList);
        return StringConstans.REDIRECT+"/order.jsp";
    }

    /**
     * 生成订单
     * @param req
     * @param resp
     * @return
     */
    public String create(HttpServletRequest req,HttpServletResponse resp){
        //1 以当前用户为数据,生成一条订单数据,订单数据中包括总价,地址的id等
        //利用上面生成的订单的id,联合购物车中的数据,将每一条数据插入到中间表中
        TbUser user = (TbUser) req.getSession().getAttribute("user");
        Long userId = user.getId();
        //获取到购物车中的数据
        CartDto cart = (CartDto) req.getSession().getAttribute("cart");
        //万一要是没有购物车数据
        if (cart == null || cart.getGoodsList()==null || cart.getGoodsList().size()==0){
            //没有商品,不下单,跳转到首页
            return StringConstans.REDIRECT + "/index.jsp";
        }
        /**
         * 用户选择的地址id
         */
        String addressId = req.getParameter("aid");
        if (StringUtils.isEmpty(addressId)){
            //需要选择地址,重新跳转到选择地址下单的页面
            return StringConstans.REDIRECT + "/order?method=preView";
        }
        //创建订单
        Map result = orderService.createOrder(userId, Long.parseLong(addressId), cart);
        //下单完成后session中的购物车数据也要清空
        //加速垃圾回收
        cart.getGoodsList().clear();
        cart.setNums(null);
        //删除session中的购物车数据
        req.getSession().removeAttribute("cart");
        //保存起来,支付页面上显示用
        req.getSession().setAttribute("order",result);
        return StringConstans.REDIRECT + "/orderSuccess.jsp";
    }
    public String show(HttpServletRequest request,HttpServletResponse response){
        //显示用户的订单,理论上要分页的吧,此处没有分页
        //显示订单的id,每一件商品的数量,价格,总价,支付状态,选择的地址
        //现在我们要显示的数据来自于两张表,一个订单表,一个是地址表,我们需要用一个对象来接收数据
        //后面的sql查询的时候返回结果是什么?要么就单独写一个对象,来接收数据,要么就分两次查询
        //要么返回一个单独的handler,自己获取数据自己填
        TbUser user = (TbUser) request.getSession().getAttribute("user");
        Long userId = user.getId();
        List<TbOrder> orderList= orderService.findByUserId(userId);
        request.getSession().setAttribute("ordersList",orderList);
        return StringConstans.REDIRECT+"/orderList.jsp";
    }
    public String detail(HttpServletRequest request,HttpServletResponse response){
        //获取订单号
        String oid = request.getParameter("oid");
        System.err.println(oid);
        TbOrder order = orderService.findOrderById(oid);
        request.getSession().setAttribute("orderDetil",order);
        return StringConstans.REDIRECT + "/orderDetail.jsp";
    }
}
